var App = {
	createdata  : {
	    create  : function(to, id){ $(to).append("<div id='"+id+"'></div>"); },
	    message : function(to, classe, msg, response)
	    {
	    	$(to).append("<div class='"+classe+"' style='display:none;'>" +
		  			"<div>"+
		  			  "<div style='float:left'><h3>"+msg+"</h3></div>"+
		  			  "<div style='float:right; text-align: right;'>"+
		  			    "<div class='close'>"+
		  			      "<a href='javascript:void(0);' class='icoFechar' id='closeTopMessage'></a>"+
		  			    "</div>" +
		  			  "</div>" +
		  			"</div>"+
		  			"<div style='clear:both'>"+response+"</div>"+
	  		    "</div>");
	    }
	},
	messagedata : {
        clear: function ()
        {
        	$("div[class^='msg']").each(function(){ $(this).remove(); });
        },
        alert:  function(type, response, label)
        {
        	App.messagedata.clear();
        	App.createdata.message("#mensagens", type, label, response);
        	
        	$('div.' + type).show();
        	//$.scrollTo('body', 300); //Executa o scroll para a tela de mensagem
        }
    },
	formatdata	: {
        even	:  function(seletor , cor){ $(seletor + ":even").css("background-color", cor); },
        calendar: function(params)
        { 
        	var options = {
    			changeMonth: true,
        		changeYear: true,
        		numberOfMonths: 1,
        	};
        	
        	if(params)
        		options = params;
        	
        	$('.datepicker').datepicker(options); 
        },
        mask    : function(field, mask)
        {
            var array_to_mask   = new Array("cep", "date", "time", "cpf", "fone");
            var array_mask      = new Array("99999-999", "99/99/9999", "99:99", "999.999.999-99", "(99) 9999-9999");
            
            for(i in array_to_mask)
                if(mask == array_to_mask[i])
                    $(field).mask(array_mask[i]);
        },
        upper    :  function()
        {
        	$(document).find(':input').each(function() {
        		$(this).bind('keyup', function(){
        			$(this).val($(this).val().toUpperCase());
        		});
        	})
        }
	},
	formdata	: {
		save	: function (is_ajax, callback, dataType)
        {
            var validator = $("form[name^='form_']").each(function()
            {
                $(this).validate({
                    errorClass: 'mensagem_erro',
                    validClass: 'valid',
                    submitHandler: function(form)
                    {
                		var options = {
                            url: $(form).attr("action"),
                            type: 'post',
                            dataType: 'json',
                            success: function(response)
                            {
                            	try
                                {
                            		if(callback)
                                	{
                            			if(response.error)
	                                  	{
                            				App.messagedata.alert('msgErro', response.error, 'Error');
	                                  		return;
	                                  	}
                                		eval(callback);
                                		App.messagedata.alert('msgSucesso', 'Dados salvos com sucesso.', 'Sucesso');
                                	}
                            		else
			                      	{
                            			if(response.error)
			                      		{
                            				App.messagedata.alert('msgErro', response.error, 'Error');
			                      			return;
			                      		}	
			                      		else
			                      		{
			                      			App.messagedata.alert('msgSucesso', 'Dados salvos com sucesso.', 'Sucesso');
			                      		}
			                      	}
                                }
                                catch(err)
                                {
                                	App.messagedata.alert('msgErro', 'Erro ao executar operaÃ§Ã£o.', 'Erro');
                                }
                            }
                        };

                        if(is_ajax)
                        {
                        	$(form).ajaxSubmit(options);
                        	return false;
                        }
                        else
                        	$(form).submit();

                        return false;
                   }
                });
            });
        },
        clear: function(seletor) {
        	$(seletor).each(function() {
        		$(this).find(':input').each(function() {
	                switch(this.type) {
	                    case 'password':
	                    case 'select-multiple':
	                    case 'select-one':
	                    case 'text':
	                    case 'textarea':
	                        $(this).val('');
	                        break;
	                    case 'checkbox':
	                    case 'radio':
	                        this.checked = false;
	                }
        		});
            });
        }
	},
	loaddata    : {
		page: function(action, to, params, responseType, callback)
        {
            $.post(action, params , function(response)
            {
        		if(response.error){
        			App.messagedata.alert('msgErro', response.error, 'Error');
        			return false;
        		}
        		else if(response.success)
        			App.messagedata.alert('msgSucesso', 'Operação realizada com sucesso.', 'Sucesso');
        		else{
        			$(to).html(response);
        		}
        		
        		if(callback)
            		eval(callback);
            	
                return false;
            });
        },
        text: function(to, text){$(to).html(text);},
        html: function(to, html){$(to).html(html); $(to).focus();},
        click: function(seletor, to, params, responseType, callback, focus)
        {
            $("a[id='"+seletor+"']").click(function(){
            	if(to) to = to; else to = $(this).attr('rel');
            	
                App.loaddata.page($(this).attr("href"), to,  params, responseType, callback);
                return false;
            });
        },
        jsonText: function(response, prefix, callback)
        {
        	for(i in response)
        	{
    			var p = prefix+i;
    			var content_to = $(p).get(0);
    			
    			if(content_to){
	    			switch(content_to.tagName)
	    			{
	    				case "INPUT":
	    				case "SELECT":
	    				case "TEXTAREA":
	    					$(prefix+i).val(response[i]);
	    				break;
	    				default:
	    					$(prefix+i).html(response[i]);
	    				break;
	    			}
    			}
    			
    			if(callback)
    				eval(callback);
        	}
        }
	},
	modaldata 	: {
        onClick : function(id, inner, type, params, focus)
        {
            $(id).click(function()
            {
            	$("#dialog_site").dialog("destroy");
                $("#dialog_site").html('');
                $("#dialog_site").load($(this).attr("href"));
                
                if(focus)
                	$(this).parent().parent().css('background', '#F5DC5E');
                
                if(type)
                {
                    if(type == "dialog")
                    {
                    	App.modaldata.openDialog("#dialog_site", params);
                    	return false;
                    }
                    else if(type == "modal") {$.modal($("#"+inner));return false;}
                    else if(type == "lightbox"){alert('lighbox');return false;}
                }
            });
        },
        openDialog: function(id, params)
        {
            if($(id).dialog( 'isOpen' ) == false)
                $(id).dialog('open');
            else 
            {
            	$("#dialog_site").dialog( "destroy" );
            	$(id).dialog(params);
            }
        },
        closeDialog: function()
        {
        	$("#dialog_site").dialog("close");
        }
    },
	ajaxdata	: {
        control :  function()
        {
    		$('body').append('<div id="loading">Aguarde carregando...</div>');
    		$('body').ajaxStart(function(){ $("#loading").show(); });
    		$('body').ajaxStop(function(){ $("#loading").hide(); App.formatdata.upper(); });
        }
	},
	griddata:
    {
    	dataTable: function(url, columns, language)
    	{
	    	 $('#dataTable').dataTable({
	 			"bJQueryUI": true,
	 			"sPaginationType": "full_numbers",
	 			"oLanguage": {
	 				"sUrl": BASEURL + "/js/dataTable/support/pt_BR.txt"
	 			},
	 			"bProcessing": false,
	 			"iDisplayLength": 1,
	 			"bLengthChange": false,
	 			"bServerSide": true,
	 	        "bRetrieve": true,
	 			"sAjaxSource": url,
	 			"aoColumnDefs": [{"bSortable": false, "aTargets": [columns.length - 1]}],
	 			"aoColumns": columns,
	 			"fnInitComplete": function(oSettings, json) {
	 	            App.griddata.remove();
	 	        }
	 		});
    	},
    	remove: function()
    	{
            $("a.delete").click(function(){
            	var url	= $(this).attr('href');
            	
            	$("#modal-content").html('<h3>Tem certeza que deseja remover este item?</h3>');
            	
            	App.modaldata.openDialog('#modal-content', {
            		width: 400, 
            		height: 120, 
            		modal:true, 
            		title: 'Remoção de dados',
            		resizable: false,
            		buttons: {
            			'Cancelar': function() {
            				$( this ).dialog( "close" );
		     			},
	            		"Remover": function() {
	            			$.post(url, {}, function(response){
	            				App.messagedata.alert('Sucesso', 'Operação realizada com sucesso.', 'Sucesso');
                                App.modaldata.clearModal();
	            			});
	            		}
            		}
            	});
            	return false;
            });
    	}
    }
};

/**
 * Inicialização dos componentes
 */
$(document).ready(function(){
	App.ajaxdata.control();
	App.formatdata.calendar();
	App.formatdata.upper();
	App.formatdata.mask('.date', 'date');
	App.formatdata.mask('.cpf', 'cpf');
	App.formatdata.mask('.fone', 'fone');
	
	// fechar a janela de mensagem
	$('#closeTopMessage').click(function(){ $('#mensagens').hide(); });
});